package dxf.sections;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;



import dxf.DXFElement;
import dxf.annotations.DXFElementType;
import dxf.annotations.DXFSubElements;
import dxf.annotations.DXFTerminator;
import dxf.tables.Table;

/**
 * La classe <code>Tables</code> rappresenta la sezione TABLES in un DXFFile
 *
 * @author Andrea Zonca
 * @author Michele Brignoli
 * @version 1.0
 */
@DXFElementType("SECTION")
@DXFTerminator("ENDSEC")
public class Tables implements DXFElement, Iterable<Table>  {

	@DXFSubElements
	List<Table> tables;

	/**
	 * Crea un'istanza di Tables, creando un vettore di Table
	 */
	public Tables() {
		tables = new ArrayList<Table>();
	}

	/**
	 * Aggiunge una Table alla collezione
	 *
	 * @param table la Table da aggiungere
	 * @return L'oggetto che ha chiamato il metodo
	 */
	public Tables add(Table table) {
		tables.add(table);
		return this;
	}

	/**
	 * Rimuove la table passata come parametro
	 *
	 * @param table la Table da rimuovere
	 * @return l'oggetto che ha chiamato il metodo
	 */
	public Tables remove(Table table) {
		tables.remove(table);
		return this;
	}

	/**
	 * Rimuove tutte le table
	 *
	 * @return l'oggetto che ha chiamato il metodo
	 */
	public Tables clear() {

		tables.clear();
		return this;
	}

	/**
	 * Consente l'iterazione sulle table
	 *
	 * @return l'iteratore sull'insieme di table
	 */
	@Override
	public Iterator<Table> iterator() {
		return tables.iterator();
	}

	/**
	 * Restituisce una versione non modificabile delle table
	 *
	 * @return la versione non modificabile delle table
	 */
	public Iterable<Table> getTables(){
		return Collections.unmodifiableCollection(tables);
	}
}
